package com.heima.leetcode.practice;

/**
 * @author 勾新杰
 * @version 1.0
 * @description: leetcode 237. 删除链表中的节点
 * @date 2025/3/13 21:54
 */
public class E237 {

    /**
     * <h3>方法一：以假乱真，实则删掉的是node.next</h3>
     * @param node 待删除的节点
     */
    public void deleteNode1(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }

    /**
     * <h3>方法二：这种方式看似没问题，但实则最后一个指针并没有修改，修改的只是引用</h3>
     * @param node 待删除的节点
     */
    public void deleteNode2(ListNode node) {
        while(node.next != null){
            node.val = node.next.val;
            node = node.next;
        }
        node = null;
    }

    /**
     * <h3>方法三：对方法二的正确处理</h3>
     * @param node 待删除的节点
     */
    public void deleteNode3(ListNode node) {
        while(node.next != null){
            node.val = node.next.val;
            if (node.next.next == null){
                node.next = null;
                return;
            }
            node = node.next;
        }
    }
}
